package cn.com.ejiakanghu.web;

import cn.com.ejiakanghu.annotation.LoginUser;
import cn.com.ejiakanghu.core.vo.BaseResult;
import cn.com.ejiakanghu.service.CollectManager;
import cn.com.ejiakanghu.service.StoreManager;
import org.linlinjava.litemall.core.util.JacksonUtil;
import org.linlinjava.litemall.core.validator.Order;
import org.linlinjava.litemall.core.validator.Sort;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.Map;

/**
 * @author houzb
 * @Description
 * @create 2021-04-14 21:56
 */
@RestController
@RequestMapping("/store")
public class StoreController {
    /**
     * 收藏类型：店铺
     */
    private Byte collectType = 2;

    @Autowired
    private CollectManager collectManager;

    @Autowired
    private StoreManager storeManager;

    /**
     * @api {get} /store/getCollect 收藏的店铺
     * @apiParam {String} keyword 搜索关键字
     * @apiParam {number} page 分页获取第几页数据
     * @apiParam {number} pageSize 分页每页的数据条数
     * @apiParam {String} sort 排序字段 默认add_time
     * @apiParam {String} order 排序方向 默认desc倒叙
     * @apiGroup 店铺
     * @apiVersion 0.1.0
     * @apiDescription 获取收藏的店铺信息
     * @apiSuccess {Object} Object 删除结果
     * @apiSuccess {int} code 请求状态码，0表示成功,其它参考状态码文档
     * @apiSuccess {String} message 结果消息说明
     * @apiSuccess {boolean} success 请求是否成功
     * @apiSuccess {Object} data 请求响应的数据
     * @apiSuccessExample {json} Success-Response:
     * {
     * "code": "请求状态码，0表示成功，其它参考状态码文档",
     * "success": "请求是否成功",
     * "timestamp": "服务器当前时间戳10位精确到秒",
     * "message": "请求成功/失败说明",
     * "data": "请求响应数据，对象或数组"
     * }
     */
    @RequestMapping("/getCollect")
    public BaseResult getCollectStores(@LoginUser Integer userId,
                                       @RequestParam(required = false) String keyword,
                                      @RequestParam(defaultValue = "1") Integer page,
                                      @RequestParam(defaultValue = "10") Integer pageSize,
                                      @Sort @RequestParam(defaultValue = "add_time") String sort,
                                      @Order @RequestParam(defaultValue = "desc") String order) {
        return collectManager.list(userId, keyword, collectType, page, pageSize, sort, order);
    }

    /**
     * @api {get} /store/collect 收藏店铺
     * @apiParam {number} id 店铺id
     * @apiGroup 店铺
     * @apiVersion 0.1.0
     * @apiDescription 将店铺设为收藏
     * @apiSuccess {int} code 请求状态码，0表示成功,其它参考状态码文档
     * @apiSuccess {String} message 结果消息说明
     * @apiSuccess {boolean} success 请求是否成功
     * @apiSuccess {Object} data 请求响应的数据
     * @apiSuccessExample {json} Success-Response:
     * {
     * "code": "请求状态码，0表示成功，其它参考状态码文档",
     * "success": "请求是否成功",
     * "timestamp": "服务器当前时间戳10位精确到秒",
     * "message": "请求成功/失败说明",
     * "data": "请求响应数据，对象或数组"
     * }
     */
    @RequestMapping("/collect")
    public BaseResult collectGoods(@LoginUser Integer userId,  Integer id) {
        Map<String, Object> bodyMap = new HashMap<>();
        bodyMap.put("valueId", id);
        bodyMap.put("type", collectType);
        return collectManager.add(userId, JacksonUtil.gson.toJson(bodyMap));
    }

    /**
     * @api {get} /store/cancelCollect 取消收藏
     * @apiParam {String} id 店铺id
     * @apiGroup 店铺
     * @apiVersion 0.1.0
     * @apiDescription 取消收藏的店铺
     * @apiSuccess {int} code 请求状态码，0表示成功,其它参考状态码文档
     * @apiSuccess {String} message 结果消息说明
     * @apiSuccess {boolean} success 请求是否成功
     * @apiSuccess {Object} data 请求响应的数据
     * @apiSuccessExample {json} Success-Response:
     * {
     * "code": "请求状态码，0表示成功，其它参考状态码文档",
     * "success": "请求是否成功",
     * "timestamp": "服务器当前时间戳10位精确到秒",
     * "message": "请求成功/失败说明",
     * "data": "请求响应数据，对象或数组"
     * }
     */
    @RequestMapping("/cancelCollect")
    public BaseResult cancelCollect(@LoginUser Integer userId, Integer id) {
        return collectManager.delete(userId, collectType, id);
    }

    /**
     * @api {post} /store/isCollect 查询店铺是否被当前用户收藏
     * @apiParam {String} id 店铺id
     * @apiGroup 店铺
     * @apiVersion 0.1.0
     * @apiDescription 查询店铺是否被当前用户收藏
     * @apiSuccess {int} code 请求状态码，0表示成功,其它参考状态码文档
     * @apiSuccess {String} message 结果消息说明
     * @apiSuccess {boolean} success 请求是否成功
     * @apiSuccess {Object} data 请求响应的数据
     * @apiSuccessExample {json} Success-Response:
     * {
     * "code": "请求状态码，0表示成功，其它参考状态码文档",
     * "success": "请求是否成功",
     * "timestamp": "服务器当前时间戳10位精确到秒",
     * "message": "请求成功/失败说明",
     * "data": "请求响应数据，对象或数组"
     * }
     */
    @RequestMapping("/isCollect")
    public BaseResult isCollect(@LoginUser Integer userId, @NotNull Integer id) {
        return collectManager.isCollect(userId, id, collectType);
    }

    /**
     * @api {post} /store/home 获取店铺主页信息
     * @apiParam {String} id 店铺id
     * @apiGroup 店铺
     * @apiVersion 0.1.0
     * @apiDescription 获取店铺主页信息
     * @apiSuccess {int} code 请求状态码，0表示成功,其它参考状态码文档
     * @apiSuccess {String} message 结果消息说明
     * @apiSuccess {boolean} success 请求是否成功
     * @apiSuccess {Object} data 请求响应的数据
     * @apiSuccessExample {json} Success-Response:
     * {
     * "code": "请求状态码，0表示成功，其它参考状态码文档",
     * "success": "请求是否成功",
     * "timestamp": "服务器当前时间戳10位精确到秒",
     * "message": "请求成功/失败说明",
     * "data": "请求响应数据，对象或数组"
     * }
     */
    @RequestMapping("/home")
    public BaseResult home(@LoginUser Integer userId, @NotNull Integer id) {
        return storeManager.home(userId, id);
    }
}
